package LeetCode;

/**
 * @author VX5
 * @Title: MJC
 * @ProjectName interview
 * @Description: TODO
 * @date ${DAT}18:27
 */
public class LeetCode91 {
    public int numDecodings(String s) {
        if (s.length() == 0){
            return 0;
        }
        int[] dp = new int[s.length()];
        dp[0] = 1;

        char[] c = s.toCharArray();
        if (c[0] == '0'){
            dp[0] = 0;
        }
        for (int i = 1; i < c.length; i++){
            if (c[i] == '0'){// 10这种情况 以0结尾的情况
                dp[i] = 0;
            }else {
                dp[i] = dp[i - 1];
            }
            int num = 10 * (c[i - 1] - '0') + c[i] - '0';
            if (num >= 10 && num <= 26){// 这里10这个限制是为了 01这种类似的情况出现 导致无效
                // 满足字母的范围
                if (i == 1){ // 如果i = 1 那么就说明合并后就直接变成了首部字母 就直接在dp[i] + 1就行了
                    dp[i]++;
                }else {// 如果不是开头 那么就会把c[i - 1]的部分合并掉，那么就相当与一个新的字母跟在c[i - 2]后面所以就会多出dp[i - 2]的情况
                    dp[i] += dp[i - 2];
                }
            }
        }
        return dp[dp.length - 1];
    }

    public static void main(String[] args) {
        System.out.println(new LeetCode91().numDecodings("226"));
    }
}
